package hm.base.dao;

import java.util.List;

import com.trendytech.tds.common.bean.Pager;

public interface IBaseDAO<T> {
	/**
	 * 生成id
	 * @return
	 */
	String generateId();
	/**
	 * 根据id获取实体对象
	 * @param id
	 * @return
	 */
	T getById(String id);

	/**
	 * 插入实体对象
	 * @param entity
	 * @return
	 */
	int insert(T entity);

	/**
	 * 更新实体对象
	 * @param entity
	 * @return
	 */
	int update(T entity);

	/**
	 * 根据id删除实体对象
	 * @param id
	 * @return
	 */
	int delete(String id);
	
	/**
	 * Delete the record logically(update the status to deleted)
	 * @param entity
	 * @return
	 */
	int deleteLogical(T entity);

	/**
	 * 分页查询
	 * @param pager
	 * @return
	 */
	List<T> getByPager(Pager<T> pager);

	/**
	 * 条件查询全部数据，警告：请确保返回的记录数量是可控的，否则有内存溢出的风险！！！
	 * @param sqlId
	 * @param params
	 * @return
	 */
	List<T> getList(String sqlId, Object params);
	
	/**
	 * 不使用泛型
	 * @param sqlId
	 * @param params
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	List getListBySql(String sqlId, Object params);
}
